package com.atguigu.gmall.order.service;

import com.atguigu.gmall.enums.model.ProcessStatus;
import com.atguigu.gmall.order.model.OrderInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

/**
 * 订单表 订单表 业务接口类
 * @author lan
 * @since 2023-05-06
 */
public interface OrderInfoService extends IService<OrderInfo> {

    /**
     * 汇总渲染订单确认页面所选的数据
     * @param request
     * @return
     */
    Map<String, Object> trade(Long userId);

    /**
     * 提交订单
     *
     * @param orderInfo
     * @param tradeNo
     * @return
     */
    Long submitOrder(OrderInfo orderInfo, String tradeNo);

    //流水号三个方法,生成,判断,删除
    /**
     * 生成流水号
     * @param userId
     * @return
     */
    String generateTradeNo(String userId);


    /**
     * 验证流水号是否一致
     * @param userId
     * @param tradeNo
     * @return
     */
    Boolean checkTradeNo(String userId, String tradeNo);


    /**
     * 删除业务流水号
     * @param userId
     */
    void deleteTradeNo(String userId);

    /**
     * 查询我的订单列表
     *
     * @param page
     * @param limit
     * @return
     */
    Page<OrderInfo> getOrderList(Page<OrderInfo> infoPage, String userId);

    void execExpiredOrder(Long orderId);

    /**
     * 根据订单ID查询订单信息 包含订单明细
     * @param orderId
     * @return
     */
    OrderInfo getOrderInfoById(Long orderId);
    /**
     * 根据订单ID修改为指定订单状态
     * @param orderId
     * @param processStatus
     */

     void updateOrderStatus(Long orderId, ProcessStatus processStatus);
}
